/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package pe.gov.mtc.dgac.licencias.bean;

import java.io.Serializable;
import java.util.Collection;
import java.util.Date;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 *
 * @author elvis
 */
@Entity
@Table(name = "AUDITORIA_PROCEDIMIENTO")
@NamedQueries({@NamedQuery(name = "AuditoriaProcedimientoTO.findByCodProcedimiento", query = "SELECT a FROM AuditoriaProcedimientoTO a WHERE a.auditoriaProcedimientoTOPK.codProcedimiento = :codProcedimiento"), @NamedQuery(name = "AuditoriaProcedimientoTO.findByCodAuditoria", query = "SELECT a FROM AuditoriaProcedimientoTO a WHERE a.auditoriaProcedimientoTOPK.codAuditoria = :codAuditoria"), @NamedQuery(name = "AuditoriaProcedimientoTO.findByFecInicEjec", query = "SELECT a FROM AuditoriaProcedimientoTO a WHERE a.fecInicEjec = :fecInicEjec"), @NamedQuery(name = "AuditoriaProcedimientoTO.findByFecTermEjec", query = "SELECT a FROM AuditoriaProcedimientoTO a WHERE a.fecTermEjec = :fecTermEjec"), @NamedQuery(name = "AuditoriaProcedimientoTO.findByUsuarioCrea", query = "SELECT a FROM AuditoriaProcedimientoTO a WHERE a.usuarioCrea = :usuarioCrea"), @NamedQuery(name = "AuditoriaProcedimientoTO.findByFecCrea", query = "SELECT a FROM AuditoriaProcedimientoTO a WHERE a.fecCrea = :fecCrea"), @NamedQuery(name = "AuditoriaProcedimientoTO.findByUsuarioModif", query = "SELECT a FROM AuditoriaProcedimientoTO a WHERE a.usuarioModif = :usuarioModif"), @NamedQuery(name = "AuditoriaProcedimientoTO.findByFecModif", query = "SELECT a FROM AuditoriaProcedimientoTO a WHERE a.fecModif = :fecModif")})
public class AuditoriaProcedimientoTO implements Serializable {
    
    private static final long serialVersionUID = 1L;
    
    @EmbeddedId
    protected AuditoriaProcedimientoTOPK auditoriaProcedimientoTOPK;
    
    @Column(name = "FEC_INIC_EJEC")
    @Temporal(TemporalType.DATE)
    private Date fecInicEjec;
    @Column(name = "FEC_TERM_EJEC")
    @Temporal(TemporalType.DATE)
    private Date fecTermEjec;
    @Column(name = "USUARIO_CREA")
    private String usuarioCrea;
    @Column(name = "FEC_CREA")
    @Temporal(TemporalType.DATE)
    private Date fecCrea;
    @Column(name = "USUARIO_MODIF")
    private String usuarioModif;
    @Column(name = "FEC_MODIF")
    @Temporal(TemporalType.DATE)
    private Date fecModif;
    
    @JoinColumn(name = "COD_AUDITORIA", referencedColumnName = "COD_AUDITORIA", insertable = false, updatable = false)
    @ManyToOne
    private AuditoriaTO auditoriaTO;    
    @JoinColumn(name = "COD_PROCEDIMIENTO", referencedColumnName = "COD_PROCEDIMIENTO", insertable = false, updatable = false)
    @ManyToOne
    private ProcedimientoTO procedimientoTO;
    
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "auditoriaProcedimientoTO")
    private Collection<HallazgoTO> hallazgoTOCollection;

    public AuditoriaProcedimientoTO() {
        this.auditoriaTO = new AuditoriaTO();
        this.procedimientoTO = new ProcedimientoTO();
    }

    public AuditoriaProcedimientoTO(AuditoriaProcedimientoTOPK auditoriaProcedimientoTOPK) {
        this.auditoriaProcedimientoTOPK = auditoriaProcedimientoTOPK;
        this.auditoriaTO = new AuditoriaTO();
        this.procedimientoTO = new ProcedimientoTO();
    }

    public AuditoriaProcedimientoTO(AuditoriaProcedimientoTOPK auditoriaProcedimientoTOPK, String usuarioCrea, Date fecCrea, String usuarioModif, Date fecModif,Date fecInicEjec,Date fecTermEjec) {
        this.fecInicEjec = fecInicEjec ;
        this.fecTermEjec= fecTermEjec;
        this.auditoriaProcedimientoTOPK = auditoriaProcedimientoTOPK;
        this.auditoriaTO = new AuditoriaTO();
        this.procedimientoTO = new ProcedimientoTO();
        this.usuarioCrea = usuarioCrea;
        this.fecCrea = fecCrea;
        this.usuarioModif = usuarioModif;
        this.fecModif = fecModif;
    }

    public AuditoriaProcedimientoTO(ProcedimientoTO procedimientoTO, String usuarioCrea, Date fecCrea, String usuarioModif, Date fecModif,Date fecInicEjec,Date fecTermEjec) {
        this.fecInicEjec = fecInicEjec ;
        this.fecTermEjec= fecTermEjec;
        this.procedimientoTO=procedimientoTO;
        this.auditoriaTO = new AuditoriaTO();
        this.procedimientoTO = new ProcedimientoTO();
        this.usuarioCrea = usuarioCrea;
        this.fecCrea = fecCrea;
        this.usuarioModif = usuarioModif;
        this.fecModif = fecModif;
    }
    
    public AuditoriaProcedimientoTO(long codProcedimiento, long codAuditoria) {
        this.auditoriaProcedimientoTOPK = new AuditoriaProcedimientoTOPK(codProcedimiento, codAuditoria);
    }

    public AuditoriaProcedimientoTOPK getAuditoriaProcedimientoTOPK() {
        return auditoriaProcedimientoTOPK;
    }

    public void setAuditoriaProcedimientoTOPK(AuditoriaProcedimientoTOPK auditoriaProcedimientoTOPK) {
        this.auditoriaProcedimientoTOPK = auditoriaProcedimientoTOPK;
    }

    public Date getFecInicEjec() {
        return fecInicEjec;
    }

    public void setFecInicEjec(Date fecInicEjec) {
        this.fecInicEjec = fecInicEjec;
    }

    public Date getFecTermEjec() {
        return fecTermEjec;
    }

    public void setFecTermEjec(Date fecTermEjec) {
        this.fecTermEjec = fecTermEjec;
    }

    public String getUsuarioCrea() {
        return usuarioCrea;
    }

    public void setUsuarioCrea(String usuarioCrea) {
        this.usuarioCrea = usuarioCrea;
    }

    public Date getFecCrea() {
        return fecCrea;
    }

    public void setFecCrea(Date fecCrea) {
        this.fecCrea = fecCrea;
    }

    public String getUsuarioModif() {
        return usuarioModif;
    }

    public void setUsuarioModif(String usuarioModif) {
        this.usuarioModif = usuarioModif;
    }

    public Date getFecModif() {
        return fecModif;
    }

    public void setFecModif(Date fecModif) {
        this.fecModif = fecModif;
    }

    public AuditoriaTO getAuditoriaTO() {
        return auditoriaTO;
    }

    public void setAuditoriaTO(AuditoriaTO auditoriaTO) {
        this.auditoriaTO = auditoriaTO;
    }

    public ProcedimientoTO getProcedimientoTO() {
        return procedimientoTO;
    }

    public void setProcedimientoTO(ProcedimientoTO procedimientoTO) {
        this.procedimientoTO = procedimientoTO;
    }

    public Collection<HallazgoTO> getHallazgoTOCollection() {
        return hallazgoTOCollection;
    }

    public void setHallazgoTOCollection(Collection<HallazgoTO> hallazgoTOCollection) {
        this.hallazgoTOCollection = hallazgoTOCollection;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (auditoriaProcedimientoTOPK != null ? auditoriaProcedimientoTOPK.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof AuditoriaProcedimientoTO)) {
            return false;
        }
        AuditoriaProcedimientoTO other = (AuditoriaProcedimientoTO) object;
        if ((this.auditoriaProcedimientoTOPK == null && other.auditoriaProcedimientoTOPK != null) || (this.auditoriaProcedimientoTOPK != null && !this.auditoriaProcedimientoTOPK.equals(other.auditoriaProcedimientoTOPK))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "licencias_dto.AuditoriaProcedimientoTO[auditoriaProcedimientoTOPK=" + auditoriaProcedimientoTOPK + "]";
    }

}
